package com.mdb.open.epay.service.epay.handle.dto;

import com.mdb.bc.api.data.DataObjectBase;
import com.mdb.open.epay.enums.type.AccountEnum;
import com.mdb.open.epay.enums.type.FeeAccountEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * @author liuyi
 * @date 2019/11/14
 **/
@Data
public class CoreTradeDto extends DataObjectBase {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "起息日期，不输入时则默认为核心当前会计日期，不可大于核心会计日期")
    private String valDt;

    @NotBlank(message = "交易币种必填" )
    @ApiModelProperty(value = "交易币种,必须与借方货币或贷方货币中的一个相同")
    private String ccy;

    @NotBlank(message = "交易金额必填")
    @ApiModelProperty(value = "交易金额")
    private String amt;

    @NotNull(message = "借方账号类型必填")
    @ApiModelProperty(value = "借方账号类型")
    private AccountEnum dacTyp;

    @ApiModelProperty(value = "借方账号,现金时不可输存款账户、同业账户、科目及卡时必输")
    private String drAc;

    @NotBlank(message = "借方货币必填")
    @ApiModelProperty(value = "借方货币,借方账号对应的货币，如果交易货币和借方货币不一致时，自动兑换成借方货币入账")
    private String drCcy;

    @ApiModelProperty(value = "借方核算机构")
    private String drBr;

    @ApiModelProperty(value = "支付凭证号码,账户类型为活期账户或者卡时选输，其他不可输,用于凭证付款时")
    private String chqNo;

    @ApiModelProperty(value = "支付凭证签发日期,账户类型为活期账户或者卡时选输，其他不可输,用于凭证付款时")
    private String chqIsdt;

    @ApiModelProperty(value = "冻结编号,冻结扣划时必须输入，其他情况不输入")
    private String holNo;

    @NotNull(message = "贷方账号类型必填")
    @ApiModelProperty(value = "贷方账号类型")
    private AccountEnum cacTyp;

    @ApiModelProperty(value = "贷方账号,现金时不可输,存款账户、同业账户、科目及卡时必输")
    private String crAc;

    @ApiModelProperty(value = "贷方户名,贷方账户为活期账户（卡），如果需要验证户名时输入，其他不可输")
    private String crNm;

    @NotBlank(message = "贷方货币必填")
    @ApiModelProperty(value = "贷方货币,贷方账号对应的货币，如果交易货币和贷方货币不一致时，自动兑换成贷方货币入账")
    private String crCcy;

    @ApiModelProperty(value = "贷方核算机构")
    private String crBr;

    @ApiModelProperty(value = "扣费代码1")
    private String feeCd1;

    @ApiModelProperty(value = "费用账号类型1,输入扣费代码1时必须输入，否则不可输入")
    private FeeAccountEnum feeAct1;

    @ApiModelProperty(value = "扣费账号1,输入扣费代码1时且存款账户、同业账户及卡时必输，其他不可输")
    private String feeAc1;

    @ApiModelProperty(value = "收费机构1")
    private String feeBr1;

    @ApiModelProperty(value = "扣费币种1,输入扣费代码1时必输，否则不可输")
    private String feeCcy1;

    @ApiModelProperty(value = "收费金额1,输入扣费代码1时必输，否则不可输")
    private String feeAmt1;

    @ApiModelProperty(value = "扣费代码2")
    private String feeCd2;

    @ApiModelProperty(value = "费用账号类型2,输入扣费代码2时必须输入，否则不可输入")
    private FeeAccountEnum feeAct2;

    @ApiModelProperty(value = "扣费账号2,输入扣费代码2时且存款账户、同业账户及卡时必输，其他不可输")
    private String feeAc2;

    @ApiModelProperty(value = "收费机构2")
    private String feeBr2;

    @ApiModelProperty(value = "扣费币种2,输入扣费代码2时必输，否则不可输")
    private String feeCcy2;

    @ApiModelProperty(value = "收费金额2,输入扣费代码2时必输，否则不可输")
    private String feeAmt2;

    @ApiModelProperty(value = "扣费代码3")
    private String feeCd3;

    @ApiModelProperty(value = "费用账号类型3,输入扣费代码3时必须输入，否则不可输入")
    private FeeAccountEnum feeAct3;

    @ApiModelProperty(value = "扣费账号3,输入扣费代码3时且存款账户、同业账户及卡时必输，其他不可输")
    private String feeAc3;

    @ApiModelProperty(value = "收费机构3")
    private String feeBr3;

    @ApiModelProperty(value = "扣费币种3,输入扣费代码3时必输，否则不可输")
    private String feeCcy3;

    @ApiModelProperty(value = "收费金额3,输入扣费代码3时必输，否则不可输")
    private String feeAmt3;

    @ApiModelProperty(value = "备注")
    private String remark;

    @ApiModelProperty(value = "附言")
    private String narr;

    @ApiModelProperty(value = "对方账号,借贷双方都为行内账户时无需填写（预留）,借贷有一方是卡或者存款时，根据实际需要填写")
    private String othAc;

    @ApiModelProperty(value = "对方户名,借贷双方都为行内账户时无需填写（预留）,借贷有一方是卡或者存款时，根据实际需要填写")
    private String othNm;

    @ApiModelProperty(value = "对方行号,借贷双方都为行内账户时无需填写（预留）,借贷有一方是卡或者存款时，根据实际需要填写")
    private String othBk;
}